<?php

/**
 * Controlador de la entidad Conductores
 *
 * En este controlador están almacenados los metodos para la
 * administración de los conductores del sistema. Incluyendo creación,
 * edición, borrado y visualización de los mismos.
 *
 *
 * Desarrollado por la Escuela de Ingeniería de Antioquia
 *
 *
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       miBusWeb.Controller
 * @fecha         2013-07-25
 * @fecha_mod	  2013-07-30
 * @cake		  CakePHP(tm) v 0.10.0.0
 */
App::uses('AppController', 'Controller');

class ConductoresController extends AppController {
    /**
     * 				CONTROLLER DATA MEMBERS
     */

    /**
     * Componente de sesión de cake
     *
     * En este archivo se usa la sesión para poder usar la función setFlash
     *
     * @var array(string)
     */
    public $components = array('Session');

    /**
     * Nombre del modelo
     *
     * Nombre del modelo para un alias las consultas y busquedas, ingresos y
     * otras interacciones con la base de datos.
     *
     * @var string
     */
    public $name = "Conductores";

    /**
     * Modelos que utiliza
     *
     * Los modelos que usa el controller. Por defecto
     * cake usa el singular basado en el nombre del modelo,
     * pero por asuntos del idioma siempre se ingresa el modelo
     * para evitar posibles problemas.
     *
     * @var array(string)
     */
    public $uses = array('Conductor',);
    public $helpers = array('Html', 'Form');

    /**
     * Acción por defecto para los conductores
     *
     * Este es el metodo base de los conductores, en este metodo
     * se buscan los conductores almacenados en el sistema y se
     * devuelven a la vista para que el usuario pueda realizar
     * acciones sobre ellos
     *
     * @return void
     */
    /**
     * 				CONTROLLER METHODS (ACTIONS)
     */
    public function index() {

    }

    public function retrieve_all() {
        if ($this->request->is('ajax')) {
            $data = $this->request->data;

            foreach ($data['order'] as $i => $order) {
                $data['order'][$i] = array(
                    'column' => $data['columns'][$data['order'][$i]['column']]['data'],
                    'direction' => strtoupper($data['order'][$i]['dir'])
                );
            }

            $filter = array();
            foreach ($data['columns'] as $i => $column) {
                if ($column['searchable'] === "true" && !empty($column['search']['value'])) {
                    $filter[] = array(
                        'column' => $column['name'],
                        'value' => $column['search']['value']
                    );
                }
            }

            $models = $this->Conductor->findAll($start = $data['start'], $length = $data['length'], $order = $data['order'], $filter);
            $totalWithFilter = $this->Conductor->findCountAll($filter);
            $total = $this->Conductor->findCountAll();

            $this->set(array(
                'draw' => $data['draw'],
                'results' => $models,
                'recordsTotal' => $total,
                'recordsFiltered' => $totalWithFilter
            ));
            $this->set('_serialize', array('results', 'recordsTotal', 'draw', 'recordsFiltered'));
        } else {
            $this->autoRender = false;
        }
    }

    /**
     * Consultar la información de un conductor especifico
     *
     * En este metodo se busca el conductor según el parametro de
     * entrada $id, si dicho parametro es nulo o si no se encuentra
     * un conductor con ese identificador asociado se devulve un error.
     * por otro lado si se encuentra el conductor se devuelve su
     * información a la vista para que sea procesada.
     *
     *
     * @param int $id identifiacador del conductor que se va a buscar.
     * @return void
     */
    public function ver($id = null) {
        if (!$id) {
            throw new NotFoundException(__('Conductor inválido'));
        }
        $conductor = $this->Conductor->findByid_conductor($id);
        if (!$conductor) {
            $this->Session->setFlash('Su Conductor es inválido');
            throw new NotFoundException(__('Conductor inválido'));
        }
        $this->set('conductor', $conductor);
    }

    /**
     * Adiciona un nuevo conductor
     *
     * Este metodo adiciona un conductor a la base de datos
     *
     * La función verifica que el request es un post, de esa
     * se da cuenta si se esta guardando un conductor nueva o si
     * simplemente se esta haciendo un llamado a la vista de
     * este action. Se adicionan los campos de auditoría, y se
     * verifica si el conductor fue almacenado correctamente.
     *
     * @return void
     */
    public function agregar() {
        if ($this->request->is('post')) {
            $this->Conductor->create();
            if ($this->Conductor->save($this->request->data)) {
                $this->Session->setFlash('Su conductor ha sido guardado');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('Su conductor no ha sido guardado');
            }
        }
    }

    /**
     * Editar un conductor previamente almacenado
     *
     * Se verifica que el parametro $id no sea nulo y luego se busca el
     * conductor a editar, en caso de tener el parametro vacio o de no
     * encontrar el conductor se lanza una excepción con el mensaje de
     * error correspondiente. Posteriormente se verifica si se están
     * almacenando los nuevos datos del conductor, de ser asi se guardan
     * estos nuevos datos y el metodo termina. De lo contrario se asume
     * que se esta haciendo un get de la vista de editar y por eso se
     * devuelven los datos de el conductor para que sean presentados en la
     * vista de edición.
     *
     * @param int $id identificador de el conductor que se va a editar.
     * @return void
     */
    public function editar($id = null) {
        if (!$id) {
            throw new NotFoundException('Conductor inválido');
        }

        $conductor = $this->Conductor->findByid_conductor($id);
        if (!$conductor) {
            throw new NotFoundException('Conductor inválido');
        }

        if ($this->request->is('post') || $this->request->is('put')) {
            $this->request->data['Conductor']['id_conductor'] = $id;
            if ($this->request->data['Conductor']['cambiar_clave'] == "0" && isset($this->request->data['Conductor']['clave_conductor'])) {
                unset($this->request->data['Conductor']['clave_conductor']);
            }
            if ($this->Conductor->save($this->request->data)) {
                $this->Session->setFlash('Conductor actualizado exitosamente');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('Conductor no actualizado');
            }
        }
        if (!$this->request->data) {
            $conductor["Conductor"]["clave_conductor"] = "";
            $this->request->data = $conductor;
        }
    }

    /**
     * Borra un conductor de la base de datos
     *
     * Se verifica que el request no sea un get para
     * minimzar la probabilidad de errores. Luego se borra el conductor
     * indicado.
     *
     * @param int $id identifiacador de el conductor que se va a editar.
     * @return void
     */
    public function borrar($id) {
        if ($this->Conductor->delete($id)) {
            $this->Session->setFlash('El Conductor con id: ' . $id . ' ha sido borrado.');
        }

        $this->redirect(array('action' => 'index'));
    }

}

?>